package com.web.startup;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.DiskStoreConfiguration;
import net.sf.ehcache.config.PersistenceConfiguration;
import net.sf.ehcache.distribution.RMICacheReplicatorFactory;
import net.sf.ehcache.store.MemoryStoreEvictionPolicy;
import net.sf.ehcache.store.disk.DiskStore;

import java.io.InputStream;
import java.net.URL;


/**
 * Created with IntelliJ IDEA.
 * User: xianfei
 * Date: 2016-01-15
 * Time: 17:29
 * To change this template use Editor | File and Code Templates.
 */

public class CacheHandle extends CacheManager {


    //没用
//    public CacheHandle(CacheConfiguration cacheConfiguration) {
//        super(cacheConfiguration);
//        cacheConfiguration.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU);    //清理机制：LRU最近最少使用 FIFO先进先出 LFU较少使用
//        cacheConfiguration.timeToIdleSeconds(5);     //对象最大闲置时间
//        cacheConfiguration.timeToLiveSeconds(10);     //对象最大生存时间
//        cacheConfiguration.eternal(false);      //对象是否永久缓存
//        cacheConfiguration.diskExpiryThreadIntervalSeconds(10);        //缓存清理时间(默认120秒)
//        cacheConfiguration.persistence(new PersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.LOCALTEMPSWAP)).maxEntriesLocalDisk(0);     //磁盘中最缓存对象数0表示无穷大)大
//        cacheConfiguration.cacheEventListenerFactory(new CacheConfiguration.CacheEventListenerFactoryConfiguration().className(RMICacheReplicatorFactory.class.getName()));
//
//
//    }


    //没用
    public CacheHandle(Configuration configuration) {
//        configuration.addDiskStore(new DiskStoreConfiguration().path("d:\\"));

//        CacheConfiguration cacheConfiguration = new CacheConfiguration("firstCache", 1);    //缓存名称(必须唯一),内存最多可以存放的对象的数量
//        cacheConfiguration.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU);    //清理机制：LRU最近最少使用 FIFO先进先出 LFU较少使用
//        cacheConfiguration.timeToIdleSeconds(10);     //对象最大闲置时间
//        cacheConfiguration.timeToLiveSeconds(10);     //对象最大生存时间
//        cacheConfiguration.eternal(false);      //对象是否永久缓存
//        cacheConfiguration.diskExpiryThreadIntervalSeconds(10);        //缓存清理时间(默认120秒)
//        cacheConfiguration.persistence(new PersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.LOCALTEMPSWAP)).maxEntriesLocalDisk(0);     //磁盘中最缓存对象数 0为不限制
//        cacheConfiguration.cacheEventListenerFactory(new CacheConfiguration.CacheEventListenerFactoryConfiguration().className(RMICacheReplicatorFactory.class.getName()));

//        configuration.addCache(cacheConfiguration);


//        configuration.cache(cacheConfiguration);

//        URL url = CacheHandle.class.getClassLoader().getResource("ehcache.xml");
//        CacheManager manager = CacheManager.create(url);
//        Cache cache = manager.getCache("firstCache");//获得缓存
    }


//    public void init() {
//        Configuration configuration = new Configuration()//
//                .diskStore(new DiskStoreConfiguration().path("java.io.tmpdir"))//临时文件目录
//                //指定除自身之外的网络群体中其他提供同步的主机列表，用“|”分开不同的主机
//                .cacheManagerPeerProviderFactory(new FactoryConfiguration<FactoryConfiguration<?>>()//
//                        .className(RMICacheManagerPeerProviderFactory.class.getName())//
//                        .properties("peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:40005/metaCache")//
//                )//
//                //配宿主主机配置监听程序
//                .cacheManagerPeerListenerFactory(new FactoryConfiguration<FactoryConfiguration<?>>()//
//                        .className(RMICacheManagerPeerListenerFactory.class.getName())//
//                        .properties("port=40004,socketTimeoutMillis=2000")//
//                )//
//                .cache(new CacheConfiguration("metaCache", 10000)//缓存名称(必须唯一),maxElements内存最多可以存放的元素的数量
//                        .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU)//清理机制：LRU最近最少使用 FIFO先进先出 LFU较少使用
//                        .timeToIdleSeconds(1000)//元素最大闲置时间
//                        .timeToLiveSeconds(2000)//元素最大生存时间
//                        .eternal(false)//元素是否永久缓存
//                        .diskExpiryThreadIntervalSeconds(120)//缓存清理时间(默认120秒)
//                        //LOCALTEMPSWAP当缓存容量达到上限时，将缓存对象（包含堆和非堆中的）交换到磁盘中
//                        //NONE当缓存容量达到上限时，将缓存对象（包含堆和非堆中的）交换到磁盘中
//                        //DISTRIBUTED按照_terracotta标签配置的持久化方式执行。非分布式部署时，此选项不可用
//                        .persistence(new PersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.NONE)).maxEntriesLocalDisk(0)//磁盘中最大缓存对象数0表示无穷大)
//                        .cacheEventListenerFactory(new CacheConfiguration.CacheEventListenerFactoryConfiguration().className(RMICacheReplicatorFactory.class.getName()))//
//                );
//
//        CacheManager manager = CacheManager.create(configuration);
//        Cache cache = manager.getCache("metaCache");//获得缓存
//    }
}
